package cn.jly.spring.annotation.ioc.service;

import cn.jly.spring.annotation.ioc.dao.BookRepository;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

/**
 * @author lanyangji
 * @description bookService
 * @date 2020/11/12 上午 8:49
 */
@Service
@Getter
public class BookService {

    /**
     * @Autowired
     * 先按照类型，如果有多个，再按照属性名作为id去找
     * 如果容器中实在没有这个bean，为了不报错，可以设置required=false
     *
     * 使用@Qualifier("bookRepository2")指定需要装配的id
     *
     *
     * 在指定bean的设置@Primary设置为首选bean，但是优先级小于@Qualifier
     *
     * spring还是支持@Resource(JSR250)和@Inject(JSR330)进行注入
     * @Resource 是java规范提供的，可以自动装配，但是默认按照组件名称装配的，
     * 且不能和@Qualifier和@Primary配合使用，且不支持required=false
     *
     * @Inject 注解需要导入依赖
     * <dependency>
     *     <groupId>javax.inject</groupId>
     *     <artifactId>javax.inject</artifactId>
     *     <version>1</version>
     * </dependency>
     */
    @Autowired(required = false)
    @Qualifier("bookRepository2")
    private BookRepository bookRepository;

    public void printBookRepository() {
        System.out.println("bookRepository = " + bookRepository);
    }
}
